• js中的对象有一个特殊的[[prototype]]内置属性,其实就是对于其他对象的引用。几乎所有的对象在创建时[[prototype]]属性都会被赋予一个非空的值。
  • [[prototype]]查找(原型链查找)
    当试图访问对象的属性时,就会触发[[Get]]操作,对于默认的[[Get]]操作来说,首先是检查对象本身是否有这个属性,如果有的话就使用对象本身的这个属性,如果访问的对象的属性不存在于该对象中,那么就在[[prototype]]链中查找,直到查找完整条[[prototype]]链,如果还是没有找到的话,那么将会返回undefined。
    当使用for…in遍历对象时和查找[[prototype]]链类似,任何可以通过原型链访问的并且可以被enumerable的属性都会被枚举。使用in操作符来检查属性在对象中是否存在时,同样会查找对象的整条原型链(无论属性是否可以被枚举)
  • [[prototype]]的最终会指向Object.prototype
    所有普通的[[prototype]]链最终都会指向内置的Object.prototype。
  • new
    当在普通的函数调用前面加上new关键字之后,就会把这个函数调用变成一个”构造函数调用”。实际上,new会劫持所有普通函数并用构造对象的形式来调用它。所以在javascript中对于”构造函数”最准确的解释是,所有带new的函数调用。函数不是构造函数,但是当且仅当使用new时,函数会变成”构造函数调用”。